<?php

namespace common\models\client;

use Yii;

/**
 * WechatPayment is the model behind the contact form.
 * @
 */
class QQClientModel extends BaseClientModel {

    /**
     * 返回码
     */
    public $ret;

    /**
     * 如果ret<0，会有相应的错误信息提示，返回数据全部用UTF-8编码。
     */
    public $msg;

    /**
     * 用户在QQ空间的昵称
     */
    public $nickname;

    /**
     * 大小为30×30像素的QQ空间头像URL
     */
    public $figureurl;

    /**
     * 大小为50×50像素的QQ空间头像URL
     */
    public $figureurl_1;

    /**
     * 大小为100×100像素的QQ空间头像URL
     */
    public $figureurl_2;

    /**
     * 大小为40×40像素的QQ头像URL
     * @static 是
     */
    public $figureurl_qq_1;

    /**
     * 大小为100×100像素的QQ头像URL。需要注意，不是所有的用户都拥有QQ的100x100的头像，但40x40像素则是一定会有
     * @static 否
     */
    public $figureurl_qq_2;

    /**
     * 性别
     * 如果获取不到则默认返回"男"
     */
    public $gender;

    /**
     * 标识用户是否为黄钻用户（0：不是；1：是）
     */
    public $is_yellow_vip;

    /**
     * 标识用户是否为黄钻用户（0：不是；1：是）
     */
    public $vip;

    /**
     * 黄钻等级
     */
    public $yellow_vip_level;

    /**
     * 黄钻等级
     */
    public $level;

    /**
     * 标识是否为年费黄钻用户（0：不是； 1：是）
     */
    public $is_yellow_year_vip;

    /**
     * @inheritdoc
     *
     * 1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号，
     * 2、判断total_amount是否确实为该订单的实际金额（即商户订单创建时的金额），
     * 3、校验通知中的seller_id（或者seller_email) 是否为out_trade_no这笔单据的对应的操作方（有的时候，一个商户可能有多个seller_id/seller_email），
     * 4、验证app_id是否为该商户本身。
     * 上述1、2、3、4有任何一个验证不通过，则表明本次通知是异常通知，务必忽略。
     * 
     */
    public function rules() {
        return [
            ['return_code', 'required'],
            //校验return_code
            ['return_code', 'validateReturnCode'],
            // notify_time, notify_type, notify_id, app_id, charset, version, sign_type, sign, trade_no, out_trade_no are required
            [['appid', 'mch_id', 'nonce_str', 'sign', 'result_code', 'openid', 'trade_type', 'bank_type', 'total_fee', 'transaction_id', 'out_trade_no', 'time_end'], 'required'],
            //
            [['appid', 'mch_id', 'device_info', 'nonce_str', 'sign', 'err_code', 'transaction_id', 'out_trade_no'], 'string', 'max' => 32],
            [['result_code', 'trade_type', 'bank_type', 'cash_fee_type'], 'string', 'max' => 16],
            [['return_msg', 'err_code_des', 'openid', 'attach'], 'string', 'max' => 128],
            [['is_subscribe'], 'string', 'max' => 1],
            [['fee_type'], 'string', 'max' => 8],
            //
            [['time_end'], 'date', 'format' => 'yyyyMMddHHmmss'],
            //
            [['total_fee', 'cash_fee', 'coupon_fee', 'coupon_count', 'coupon_fee'], 'number'],
            //校验支付回调通知状态
            ['result_code', 'validateResultCode'],
            //校验appid,mch_id
            [['appid', 'mch_id'], 'validateConfigs'],
            //验证支付宝请求签名
            ['sign', 'validateSignature'],
            //校验商户订单号
            ['out_trade_no', 'validateOutTradeNo'],
            //校验订单支付金额
            ['total_fee', 'validateTotalFee'],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels() {
        return [
            'appid' => '应用ID',
            'mch_id' => '商户号',
            'device_info' => '设备号',
            'nonce_str' => '随机字符串',
            'sign' => '签名',
            'result_code' => '业务结果',
            'err_code' => '错误代码',
            'err_code_des' => '错误代码描述',
            'openid' => '用户标识',
            'is_subscribe' => '是否关注公众账号',
            'trade_type' => '交易类型',
            'bank_type' => '付款银行',
            'total_fee' => '总金额',
            'fee_type' => '货币种类',
            'cash_fee' => '现金支付金额',
            'cash_fee_type' => '现金支付货币类型',
            'coupon_fee' => '代金券金额',
            'coupon_count' => '代金券使用数量',
            'coupon_id_$n' => '代金券ID',
            'coupon_fee_$n' => '单个代金券支付金额',
            'transaction_id' => '微信支付订单号',
            'out_trade_no' => '商户订单号',
            'attach' => '商家数据包',
            'time_end' => '支付完成时间',
        ];
    }

}
